Nakama Session
Session = ユーザーがシステムに認証されている期間のこと
Session が作られる = ログイン
Session が破棄される = ログアウト
期間の長さは、任意にログイン/ログアウトしない限りは token_expiry_secで決められる
(configuration で設定)
session object の中身
code: session.yml
usename: string
create_time: int , string?
token: jwt (string)
# payload 部分を base64 decode するとこんな感じ
# (何故かjsonの閉じタグが無い)
{"uid":"af250570-d999-416d-b25c-ae1ecba13001","usn":"GWRXkcWSoi","exp":1602231048%
closing bracket 消える問題
jwt の最後の文字が消える
base64の偶数、奇数チェックの==が最後の文字として入ってないから、最後の文字が省略されてる?
ちゃんとした base64 decode ツールを使えば==がなくてもちゃんと出てくるらしい
Authenticate
code: .sh
--user 'defaultkey:' \
--data '{
"email": "hello@heroiclabs.com",
"password": "password",
"vars": { "key": "value" }
}'
Session Variables
認証時にアクセストークンのJWTペイロードに含めることができる
設定したら、再認証するまで read-only
再認証したら消える。
認証ごとの情報のエッジキャッシュとして使える。
code: .sh
{
"uid":"1eae8dd4-8399-4c25-8669-45a01d283236",
"usn":"mycustomusername",
"vrs":{"key":"value"},
"exp":160223270
}
ログインするときの payload に vars というフィールドを定義して key value で設定
トークン側では vrsに入ってる
(なぜ統一しないのだろう)
client で設定
authenticate するときに、varsをペイロードに含める
server で設定
サーバー側の Autheticate**** コールバックの前に、
hook関数を登録することで設定できる。
code: .lua
local nk = require("nakama")
local function set_session_vars(context, payload)
nk.logger_info("User session contains key-value pairs set by the client: " .. nk.json_encode(payload.account.vars))
return payload
end
nk.register_req_before(set_session_vars, "AuthenticateEmail")
他の関数で使うには、context.varsでアクセス